package com.zf.nio.files;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * Java NIO Files 类(java.nio.file.Files)提供了几种操作文件系统中的文件的方法。
 * @author Zhou Feng
 */
public class FilesDemo01 {
    public static void main(String[] args) {
        Path path = Paths.get("d:\\sgg");

        Path sourcePath = Paths.get("d:\\a.txt");
        Path destinationPath = Paths.get("d:\\b.txt");
        try {
            // 创建单层目录
            //Path directory = Files.createDirectory(path);

            // 赋值文件
            //Files.copy(sourcePath, destinationPath);
            //Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);

            // 移动或者重命名文件
            //Files.move(sourcePath, destinationPath);
            //Files.move(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);

            // Files.delete()
            //Files.delete()方法可以删除一个文件或者目录。
            //Files.deleteIfExists(destinationPath);


            //Files.walkFileTree()方法包含递归遍历目录树功能，将 Path 实例和 FileVisitor
            //作为参数。Path 实例指向要遍历的目录，FileVisitor 在遍历期间被调用
            Files.walkFileTree(Paths.get("d:\\tm"), new FileVisitor<Path>() {
                @Override
                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                    System.out.println(file.toAbsolutePath());
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                    return null;
                }

                @Override
                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                    return FileVisitResult.CONTINUE;
                }
            });


        } catch (FileAlreadyExistsException e){
            // 目录或者文件已经存在
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
